package br.com.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import br.com.beans.ItemSaude;

/**
 * Classe de manipulacao de objetos persistidos via JPA
 * Objetos da classe bean ItemSaude
 */
public class ItemSaudeDAO extends GenericDAO<ItemSaude> {

	/**
	 * Localiza um item persistido pela descricao
	 * @param descricao Descricao do item
	 * @return Objeto persistido
	 */
	public ItemSaude localizar(String descricao) {

		EntityManager em = factory.createEntityManager();
		EntityTransaction t = em.getTransaction();
		ItemSaude obj = null;

		try {

			t.begin();
			Query query = em.createQuery("from ItemSaude where descricao like :descricao");
			query.setParameter("descricao", descricao);
			obj = (ItemSaude) query.getSingleResult();
			t.commit();

		} catch (Exception e) {

			if (debugInfo) {
				e.printStackTrace();
			}
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}

		return obj;
	}

	/**
	 * Insere (persiste) um item 
	 * @param obj Item a ser persistido
	 * @return True se bem sucedido, false se houve erro.
	 */
	@Override
	public boolean inserir(ItemSaude obj) {
		
		ItemSaude itemSaude = null;
		
		if (obj != null) {
			itemSaude =	localizar(obj.getDescricao());
		}
			
		return (itemSaude == null) ? super.inserir(obj) : true;
	}
	
	/**
	 * Lista Itens por Tipo
	 * @param tipo Tipo do item
	 * @return Lista de objetos persistidos
	 */

	@SuppressWarnings("unchecked")
	public List<ItemSaude> listar(ItemSaude.Tipo tipo) {

		EntityManager em = factory.createEntityManager();
		EntityTransaction t = em.getTransaction();
		List<ItemSaude> list = null;

		try {

			t.begin();
			Query q = em.createQuery("from ItemSaude where tipo = :tipo");
			q.setParameter("tipo", tipo);
			list = (List<ItemSaude>) q.getResultList();
			t.commit();

		} catch (Exception e) {

			if (debugInfo) {
				e.printStackTrace();
			}
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}

		return list;
	}
	
	
}
